// Lang_30 [abstract methods].nova // The application class. class AbstractMethodsApp { // Application class's "main" function. public static void main( String[] args ) { // Create a new object using a concrete class and assign to an absract base class reference. AbstractClass abstractClassRef = new ConcreteClass( ); // Call an instance method using the abstract class reference. // NOTE: Because the method is not virtual, the abstract class's method will be called. abstractClassRef.method0( ); // Call a virtual method using the abstract class reference. // NOTE: Because the method is virtual, the concrete class's method will be called. abstractClassRef.method1( ); // It is not possible to instantiate a new object using an abstract class. // Uncomment this line to enable the error. // AbstractClass abstractClass = new AbstractClass( ); } } // Base abstract class. class AbstractClass { // Declare an instance method (not virtual). public void method0( ) { Stream.writeLine( "AbstractClass.method0( ) - called" ); } // Declare an abstract method. public abstract void method1( ); } // Concrete class that inherits from and implements an abstract class. class ConcreteClass : AbstractClass { // Declare an instance method. public void method0( ) { Stream.writeLine( "ConcreteClass.method0( ) - called" ); } // Declare an instance method (becomes virtual via inheritance). public void method1( ) { Stream.writeLine( "ConcreteClass.method1( ) - called" ); } }